/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cooperativa.dao;

import java.util.Calendar;
import java.util.Date;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.cooperativa.entities.Socio;
import org.cooperativa.entities.Transaccion;
import org.cooperativa.funciones.Funciones;

/**
 *
 * @author giovanny
 */
@Stateless
public class TransaccionFacade extends AbstractFacade<Transaccion> {
    @PersistenceContext(unitName = "CooperativaPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public TransaccionFacade() {
        super(Transaccion.class);
    }
    
    /***El siguiente metodo sirve para verificar si el socio tiene pagos anteriores pendientes***/
    public Boolean verficarPagoAnterior(Socio s) {
//        Date fechaUltimoPago = new Date();
//        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
          Calendar calendarioInicial = Calendar.getInstance();
          Calendar calendarioFinal = Calendar.getInstance();
          Date fechaActual = new Date();
//  fecha=dateFormat.format(cal.getTime());    
        int diferencia;
        Funciones f = new Funciones();
        
        //Query q = em.createQuery("SELECT x FROM Magazine x WHERE x.title = :titleParam and x.price > :priceParam");
        //Query q = em.createNamedQuery("Transaccion.findByIdSocio");
        //q.setParameter("idSocio", s).setParameter("priceParam", 5.0);
        Query q = em.createNamedQuery("Transaccion.findLastPayment");
        q.setParameter("idSocio", s);
        q.setFirstResult(0); //se establece la posicion de inicio de la Lista de resultados
        q.setMaxResults(1);  //se establece el maximo numero de registros a recuperar (en este caso queremos el primero ya que ordenamos descendentemente)
                        
        Transaccion result = (Transaccion) q.getSingleResult();
        
        calendarioInicial.setTime(result.getFecha());
        calendarioFinal.setTime(fechaActual);
        
        diferencia = f.diferenciaFechas(calendarioInicial, calendarioFinal, 2);
        
        if(diferencia > 1){
            //se pasa de la fecha limite, true significa que el socio se paso de la fecha limite de pago
            return true;
        }
        else{
            //false, significa que el socio esta pagando dentro del tiempo valido
            return false;
        }
    
    }
    
}
